package com.atguigu.gmall.list.service;


import com.atguigu.gmall.list.model.SearchParam;
import com.atguigu.gmall.list.model.SearchResponseVo;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;

public interface SearchService {
    /**
     * 将指定商品SKU封装商品文档对象，保存到ES索引库
     *
     * @param skuId
     * @return
     */
    void upperGoods(Long skuId);

    /**
     * 下级商品
     * @param skuId
     */
    void lowerGoods(Long skuId);


    /**
     * 对指定商品分值（热门商品）进行更新
     * 分值
     *
     * @param skuId
     * @param score
     * @return
     */
    void incrHotScore(Long skuId, int score);

    /**
     * 商品检索，包含：分页检索商品信息，动态聚合过滤条件。支持多条件过滤
     * @param searchParam
     * @return
     */
    SearchResponseVo search(SearchParam searchParam);

    /**
     * 构建用于检索请求对象，封装请求体参数
     * @param searchParam 查询条件
     * @return
     */
    SearchRequest buildDSL(SearchParam searchParam);


    /**
     * 对ES响应JSON结果进行解析，封装为响应VO对象
     *
     * @param response
     * @param searchParam
     * @return
     */
    SearchResponseVo parseResult(SearchResponse response, SearchParam searchParam);
}
